/*!
 *  \file       PoissonRandomGenerator.hpp
 *  \brief      Definizione della classe \c PoissonRandomGenerator
 *  \author     Davide Scola <S2299453@studenti.unige.it>
 *  \author	Minetti Alberto <S3064777@studenti.unige.it>
 *  \version    1.0
 */

#ifndef _POISSON_RANDOM_GENERATOR_H
#define _POISSON_RANDOM_GENERATOR_H

/*!
 *  \brief      Definizione della classe \c PoissonRandomGenerator
 */
template< typename tType >
class PoissonRandomGenerator : public NormalizedRandomGenerator< tType >
{
  public :
    PoissonRandomGenerator( tType, IEntropyGenerator & );
    PoissonRandomGenerator( PoissonRandomGenerator< tType > const& );
    
    virtual PoissonRandomGenerator& operator=( const PoissonRandomGenerator& );
    
    virtual tType next();
    
  protected :
    tType	mean_;
    
    virtual tType gammln( tType );
    virtual tType poidev( tType );
};

// Idiomatic random generators
typedef PoissonRandomGenerator< double >	PoissonianRandomGenerator;

#endif              /* _POISSON_RANDOM_GENERATOR_H */
